;ah=06
Func_ClearScreen:
    mov ax, 0600h  ;al = 0 清屏，其余参数不用理
    mov bx, 0700h
    mov cx,0
    mov dx, 0184fh
    int 10h



Func_SetFocus:
    mov ax, 200h ;
    mov bx, 0000h ;行号
    mov dx, 0000h ;列号
    int 10h

;ah = 0x13
Func_DisplayChar:
    mov ax,1301h   ;al = 01,显示后，光标会随着移动
    mov bx,000fh  ;BH 页码  BL 字符颜色属性
    mov cx, 10h  ;cx = 字符串长度
    push ax  
    mov ax, ds
    mov es,ax   ;es = 内存段地址
    pop ax
    mov bp, StartBootMessage  ;bp = 内存地址
    int 10h

;ah = 0
Func_Reset_Flapy:
    xor ah, ah ;重置磁盘驱动器
    xor dl, dl ;dl为驱动器号，00H~7FH为软盘， 80H~FFH为硬盘
    int 13h

    jmp $

    StartBootMessage db "Start Booting..."


;AX=待读取的磁盘的扇区号
;CL=读入的扇区数量
;ES:BX=目标缓冲区
;功能:将LBA转换为CHS
Func_ReadOneSector:
    push bp
    mov bp, sp
    sub esp, 2 ;
    mov byte [bp - 2] ,cl ;保存读取次数
    push bx ;保存目标地址
    mov bl, [BPB_SecPerTrk]
    div bl  ;AX / BL  扇区数/每个磁道的扇区数
    inc ah  ;R+1 等于开始扇区号
    mov cl, ah;cl=扇区号
    mov dh, al;dh=磁头号
    shr al, 1  ;计算磁柱
    mov ch, al ;ch=磁柱的低8位
    and dh, 1 ;磁头号  因为只有0 和 1两个选项
    pop bx ;数据缓冲区
    mov dl, [BS_DrvNum] ;驱动器号
Label_Go_On_Reading:
    mov ah, 2 ;2号功能
    mov byte al, byte [bp - 2];al=读入的扇区数
    int 13h ;读取成功,CF标志位被复位
    jc Label_Go_On_Reading 
    add esp, 2
    pop bp
    ret







;AH=FAT表项编号
;return:下一个表项的编号
;功能:获取传入FAT表项地址的下一个FAT表项地址
Func_GetFATEntry:

	push	es
	push	bx
	push	ax
	mov	ax,	00
	mov	es,	ax
	pop	ax
	mov	byte	[Odd],	0
	mov	bx,	3
	mul	bx
	mov	bx,	2
	div	bx
	cmp	dx,	0 ;判断表项是奇还是偶
	jz	Label_Even
	mov	byte	[Odd],	1

Label_Even:

	xor	dx,	dx
	mov	bx,	[BPB_BytesPerSec]
	div	bx
	push	dx
	mov	bx,	8000h
	add	ax,	SectorNumOfFAT1Start ;表项扇区号
	mov	cl,	2
	call	Func_ReadOneSector ;读取两个扇区
	
	pop	dx 
	add	bx,	dx ;
	mov	ax,	[es:bx] ;获取读取数据的前16字节
	cmp	byte	[Odd],	1
	jnz	Label_Even_2
	shr	ax,	4  ;如果是奇数，就取高12字节,否则就直接返回

Label_Even_2:
	and	ax,	0fffh
	pop	bx
	pop	es
	ret



;al = 要显示的字符
;功能：打印一个字符
Func_PrintChar:
	mov	ah,	0eh  ;ah = 0e
	mov	bl,	0fh  ;bl = 前景色
	int	10h
    ret



;cx = 字符串长度
;es:bp=字符缓冲区
;功能：打印字符串
Func_PrintStr:
	mov	ax,	1301h  ;ah = 0x13
	mov	bx,	000fh
	mov	dx,	0200h		;ah = row  al = 列
	mov	bp,	StartLoaderMessage
	int	10h
    ret

    